const UglifyJS = require("uglify-js");
const fs = require('fs');
const modules = ['header', 'footer'] // 后台html模块，例如header和footer
const outPutDir = './buildHtml' // 输出目录

modules.forEach((item) => {
  buildMoudle(item)
})
/**
 * 构建指定模块，例如header和footer
 */
function buildMoudle(moduleName) {
  fs.readFile(`./src/js/${moduleName}.js`, (err, data) => {
    const code = data.toString()
    let jsCode = ''
    // 如果相应的模块js代码不为空，那么就进行压缩处理
    if (code !== '') {
      jsCode = UglifyJS.minify(code).code
    }

    fs.readFile(`./src/template/${moduleName}.html`, (err, data) => {
      const moduleTemplateHtml = data.toString()
      const finalCode = wrapJSCodeByHtml(jsCode, moduleTemplateHtml)
      buildMoudleFile(finalCode, moduleName)
    })
  })
}

/**
 * 用指定模块的Html代码包裹js代码
 * @param {*} jsCode js代码
 * @param {*} moduleTemplateHtml html模板代码
 */
function wrapJSCodeByHtml(jsCode, moduleTemplateHtml) {
  return moduleTemplateHtml.replace("{{jsContent}}", jsCode)
}

/**
 * 将压缩后的代码写入到指定模块同名文件
 * @param {*} code 压缩后的代码
 * @param {*} moduleName 模块名
 */
function writeFileByCode(code, moduleName) {
  fs.writeFile(`${outPutDir}/${moduleName}.html`, code, 'utf8', (err) => {
    if (err) {
      console.log(err);
      return false;
    }
    console.log(`构建${moduleName}成功`);
  })
}

/**
 * 构建指定模块文件
 * @param {*} code 压缩后的代码
 * @param {*} moduleName 模块名
 */
function buildMoudleFile(code, moduleName) {
  fs.exists(outPutDir, (isExist) => {
    if (isExist) {
      writeFileByCode(code, moduleName)
    } else {
      fs.mkdir(outPutDir, () => {
        writeFileByCode(code, moduleName)
      })
    }
  })
}
